const express = require('express')
const router = express.Router()

// 一级路由： /user
// 二级路由： /register
// http://127.0.0.1:3005/user/register
// 导入已封装的数据函数
const db = require('../../config/db.js')
//上传图片的包
let multer = require('multer')


let fs = require('fs')
// 生成ID
const { v4: uuidv4 } = require('uuid')
// 引入jwt token工具
const JwtUtil = require('../../utils/jwt')
const config = require('../../config/baseinfo')
const HostUrl = `${config.PROTOCOL}://${config.HOST}:${config.PORT}`
const rep_phone = /^1[3-9]\d{9}$/;
const rep_email = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
// 增加数据(注册)
router.post('/register', function (req, res) {
    let id = uuidv4() || Math.random().toString().slice(2);
    let userName = req.body.userName; // 用户名
    let passWord = req.body.passWord; // 密码
    let user = req.body.email; //  邮箱 
    let avatar = 'avatar.png'   //头像


    // 查询用户表
    let user_check_sql = '';
    if (rep_email.test(user)) {
        user_check_sql = 'select * from user where email="' + user + '"';
    }

    db.query(user_check_sql, (err, rows) => {
        if (err) {
            res.send({
                code: -1,
                msg: '查询失败',
                msg2: req.body,
            })
        } else {
            // 解构赋值(数据库)
            if (rows && rows.length != 0) {
                res.send({
                    code: 201,
                    msg: '用户已存在',
                })
            }
            else {
                // 添加用户
                let user_insert_sql = '';
                if (rep_email.test(user)) {
                    user_insert_sql = 'insert into User(userName,passWord,id,email,avatar) values("' + userName + '","' + passWord + '","' + id + '","' + user + '","' + avatar + '")';
                }

                db.query(user_insert_sql, (err) => {
                    if (err) {
                        res.send({
                            code: -1,
                            msg: '注册失败',
                            msg2: err
                        })
                    } else {
                        res.send({
                            code: 200,
                            msg: '注册成功',
                            userName: userName
                        });
                    }
                })
            }
        }
    })
})
// 注册（邮箱验证）
// router.post('/register', function (req, res) {
//     let id = uuidv4() || Math.random().toString().slice(2);
//     let userName = req.body.userName; // 用户名
//     let passWord = req.body.passWord; // 密码
//     let user = req.body.user; //  邮箱 / 手机号
//     let v1 = req.body.v1; // 验证码
//     let time = req.body.time || '2022-09-29 00:00:00'; //  用户创建的时间
//     // 注册逻辑
//     const register = () => {
//         // 查询用户表
//         if (rep_email.test(user)) {
//             user_check_sql += 'select * from user where email="' + user + '"';
//         }
//         else if (rep_phone.test(user)) {
//             user_check_sql += 'select * from user where phone = "' + user + '"';
//         }
//         db.query(user_check_sql, (err, rows) => {
//             if (err) {
//                 res.send({
//                     code: -1,
//                     msg: '查询失败'
//                 })
//             } else {
//                 // 解构赋值(数据库)
//                 if (rows && rows.length != 0) {
//                     let [user] = rows;
//                     if (user.email == user || user.phone == user) {
//                         res.send({
//                             code: 201,
//                             msg: '用户已存在'
//                         })
//                     } else {
//                         res.send({
//                             code: 501,
//                             msg: '后端业务异常',
//                             rows
//                         })
//                     }
//                 }
//                 else {
//                     // 添加用户
//                     let user_insert_sql = '';
//                     if (rep_email.test(user)) {
//                         user_insert_sql = 'insert into User(userName,passWord,id,email,time,count) values("' + userName + '","' + passWord + '","' + id + '","' + user + '","' + time + '",0)';
//                     }
//                     else
//                         if (rep_phone.test(user)) {
//                             user_insert_sql = 'insert into User(userName,passWord,id,phone,time,count) values("' + userName + '","' + passWord + '","' + id + '","' + user + '","' + time + '",0)';
//                         }
//                     db.query(user_insert_sql, (err) => {
//                         if (err) {
//                             res.send({
//                                 code: -1,
//                                 msg: '注册失败'
//                             })
//                         } else {
//                             res.send({
//                                 code: 200,
//                                 msg: '注册成功',
//                                 userName: userName
//                             });
//                         }
//                     })
//                 }
//             }
//         })
//     }

//     // 邮箱验证
//     if (v1) {
//         let code_check_sql = 'select * from code where v1 = "' + v1 + '"'
//         db.query(code_check_sql, (err, rows) => {
//             if (err) {
//                 res.send({
//                     code: -1,
//                     msg: '服务异常'
//                 })
//             } else {
//                 if (rows && rows.length != 0) {
//                     // 判断验证码是否冲突
//                     let arr = [...rows].filter(item => {
//                         if (item.v1 == v1) {
//                             return item;
//                         }
//                     })
//                     if (arr.length == 1) {
//                         let code_check_sql2 = 'select * from code where v1 = "' + v1 + '" and cid = "' + arr[0].cid + '"';
//                         db.query(code_check_sql2, (err, rows) => {
//                             if (err) {
//                                 res.send({
//                                     code: -1,
//                                     msg: '邮箱验证失败'
//                                 })
//                             } else {
//                                 // 验证通过 , 再注册
//                                 register();
//                             }
//                         })
//                     } else {
//                         res.send({
//                             code: -1,
//                             msg: '验证码冲突了，请重新发送'
//                         })
//                     }
//                 } else {
//                     res.send({
//                         code: 200,
//                         msg: '验证码错误'
//                     })
//                 }
//             }
//         })
//     } else {
//         res.send({
//             code: 404,
//             msg: '请发送邮箱验证码'
//         })
//     }
// })

// 查询数据(登录)
router.post('/login', function (req, res) {
    let passWord = req.body.passWord;
    let user = req.body.user;
    // 查询用户表
    let user_check_sql = ''
    // 判断
    if (rep_email.test(user)) {
        user_check_sql = 'select * from user where passWord="' + passWord + '" and email="' + user + '"';
    }
    db.query(user_check_sql, (err, rows) => {
        if (err) {
            res.send({
                code: -1,
                msg: '登录失败',
                msg2: req.body
            })
        } else {
            if (rows && rows.length == 0) {
                res.send({
                    code: 404,
                    msg: '账号或密码错误'
                });
            } else {
                let row = rows
                row[0].avatar = `${HostUrl}/static/upload/${rows[0].avatar}`
                let [{ id, userName, email, phone, avatar, power }] = row;
                // 将用户id传入并生成token
                let jwt = new JwtUtil(id);
                // 获取token
                let token = jwt.generateToken();
                // 将 token 返回给客户端
                res.send({
                    code: 200,
                    msg: '登录成功',
                    id,
                    token,
                    userName,
                    email,
                    phone,
                    avatar,
                    power
                });
            }
        }
    })
})

// 用户列表
router.get('/list', function (req, res) {
    let cate_check_sql = 'select * from user';
    db.query(cate_check_sql, (err, rows) => {
        if (err) {
            res.send({
                code: -1,
                msg: '获取用户列表失败'
            })
        } else {
            let row = rows
            for (i = 0; i < rows.length; i++) {
                row[i].avatar = `${HostUrl}/static/upload/${rows[i].avatar}`
            }
            res.send({
                code: 200,
                msg: '获取用户列表成功',
                res: row
            })
        }
    })
})
// 修改用户头像
router.post('/setAvatar', function (req, res) {
    let avatar = req.body.avatar
    let img = `${HostUrl}/static/upload/${avatar}`
    let id = req.body.id

    var user_update_sql = "update user set avatar = '" + avatar + "' where  id = '" + id + "'";
    db.query(user_update_sql, function (err, rows) {
        if (err) {
            res.send({
                code: -1,
                msg: "修改失败",
                msg2: avatar
            });
        } else {
            res.send({
                code: 200,
                msg: "修改头像成功",
                avatar: img
            });
        }
    });
})
// 删除用户
router.post('/del', function (req, res) {
    let id = req.body.id

    let sql = 'delete from user where id = "' + id + '"';
    db.query(sql, function (err) {
        if (err) {
            res.send({
                code: -1,
                msg: '删除失败'
            })
        } else {
            res.send({
                code: 200,
                msg: '删除成功'
            })
        }
    })
})

// 处理图片
// 通过filename属性定制
let storage = multer.diskStorage({
    // 保存的路径
    destination: function (req, file, callback) {
        callback(null, 'public/upload/')
    },
    filename: function (req, file, callback) {
        // 将保存文件名设置为 字段名 + 时间戳，比如 logo-1478521468943
        let suffix = file.mimetype.split('/')[1]; //获取文件格式
        callback(null, file.fieldname + '-' + Date.now() + '.' + suffix);
    }
});
//生成的图片放入uploads文件夹下
let upload = multer({
    storage: storage
})



module.exports = router;


